# -*- coding: utf-8 -*-

# 获取引擎服务端API的模块
import mod.server.extraServerApi as serverApi

# 获取引擎服务端System的基类，System都要继承于ServerSystem来调用相关函数
ServerSystem = serverApi.GetServerSystemCls()
# 获取组件工厂，用来创建组件
compFactory = serverApi.GetEngineCompFactory()


# 在modMain中注册的Server System类
class TutorialServerSystem(ServerSystem):

    # ServerSystem的初始化函数
    def __init__(self, namespace, systemName):
        # 首先调用父类的初始化函数
        super(TutorialServerSystem, self).__init__(namespace, systemName)
        print "===== TutorialServerSystem init ====="
        # 初始时调用监听函数监听事件
        self.ListenEvent()
        comp = serverApi.GetEngineCompFactory().CreateCommand(serverApi.GetLevelId())
        opLevel = 1
        suc = comp.SetDefaultPlayerPermissionLevel(opLevel)
        print "SetDefaultPlayerPermissionLevel to {} suc={}".format(opLevel, suc)

    # 监听函数，用于定义和监听函数。函数名称除了强调的其他都是自取的，这个函数也是。
    def ListenEvent(self):


        self.ListenForEvent(serverApi.GetEngineNamespace(),
                            serverApi.GetEngineSystemName(), "ServerChatEvent", self,
                            self.OnServerChat)

        self.ListenForEvent(serverApi.GetEngineNamespace(),
                            serverApi.GetEngineSystemName(), "OnScriptTickServer", self,
                            self.OnScriptTickServer)


        # # 在自定义的ServerSystem中监听引擎的事件ServerChatEvent，回调函数为OnServerChat
        # self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), "ServerChatEvent", self,
        #                     self.OnServerChat)

    # 反监听函数，用于反监听事件，在代码中有创建注册就对应了销毁反注册是一个好的编程习惯，不要依赖引擎来做这些事。
    def UnListenEvent(self):
        self.UnListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), "ServerChatEvent", self,
                              self.OnServerChat)

        self.UnListenForEvent(serverApi.GetEngineNamespace(),
                            serverApi.GetEngineSystemName(), "OnScriptTickServer", self,
                            self.OnScriptTickServer)


    # 函数名为Destroy才会被调用，在这个System被引擎回收的时候会调这个函数来销毁一些内容
    def Destroy(self):
        print "===== TutorialServerSystem Destroy ====="
        # 调用上面的反监听函数来销毁
        self.UnListenEvent()

    def OnServerChat(self, args):
        print args

    def OnScriptTickServer(self):
        pass